package main

import (
	"fmt"
	"math"
)

type Employee1 struct {
	name     string
	salary   int
	currency string
}

/*
displaySalary()方法被转化为一个函数，把 Employee 当做参数传入。
*/
func displaySalary(e Employee1) {
	fmt.Printf("Salary of %s is %s%d", e.name, e.currency, e.salary)
}



type Rectangle struct {
	length int
	width  int
}

type Circle struct {
	radius float64
}
//Go 不是纯粹的面向对象编程语言，而且Go不支持类。因此，基于类型的方法是一种实现和类相似行为的途径。
//相同的名字的方法可以定义在不同的类型上，而相同名字的函数是不被允许的。
func (r Rectangle) Area() int {
	return r.length * r.width
}

func (c Circle) Area() float64 {
	return math.Pi * c.radius * c.radius

}

func main() {
	emp1 := Employee1{
		name:     "Sam Adolf",
		salary:   5000,
		currency: "$",
	}
	displaySalary(emp1)



	r := Rectangle{
		length: 10,
		width:  5,
	}
	fmt.Printf("Area of rectangle %d\n", r.Area())
	c := Circle{
		radius: 12,
	}
	fmt.Printf("Area of circle %f", c.Area())


}